#pragma once 
#include <iostream>
#include <string>

namespace mylog{
    class LogLevel{
    public:
        enum class value{
            UNKNOWN = 0,
            DEBUG,
            INFO,
            WARNING,
            ERROR,
            FATAL,
            OFF
        };
        static std::string toString(LogLevel::value level){
            #define TO_STRING(value) #value
            switch(level){
                case value::UNKNOWN : return TO_STRING(UNKNOWN);
                case value::DEBUG : return TO_STRING(DEBUG);
                case value::INFO : return TO_STRING(INFO);
                case value::WARNING : return TO_STRING(WARNING);
                case value::ERROR : return TO_STRING(ERROR);
                case value::FATAL : return TO_STRING(FATAL);
                case value::OFF : return TO_STRING(OFF);
                #undef TO_STRING
                default : return "UNKNOWN";
            }
            return "UNKNOWN";
        }
    };
}